/*****************************************************************************************
**  Author:jxx
**  QQ:283591387
**  框架文档： http://v3.volcore.xyz/
*****************************************************************************************/
//此js文件是用来自定义扩展业务代码，在当前[表.vue]文件中也可以实现业务处理

let extension = {
  components: {
    gridHeader: '',
    gridBody: '',
    gridFooter: '',
    modelHeader: '',
    modelBody: '',
    modelRight: '',
    modelFooter: ''
  },
  tableAction: '',
  buttons: { view: [], box: [], detail: [] }, // 不显示新增、编辑、删除等按钮
  methods: {
    //下面这些方法可以保留也可以删除
    onInit() {  //框架初始化配置前，
      // 添加一个跳转到新增页面的按钮
      this.buttons.unshift({
        name: '新增货品', //按钮名称
        icon: 'Plus', //按钮图标
        type: 'primary', //按钮样式
        onClick: function () {
          // 跳转到新增页面
          this.$router.push({
            path: '/productadd'
          });
        }
      });

      // 添加查看详情按钮
      this.buttons.push({
        name: '查看详情', //按钮名称
        icon: 'View', //按钮图标
        type: 'info', //按钮样式
        onClick: function () {
          // 获取选中的行
          let rows = this.getSelected();
          if (!rows || rows.length === 0) {
            return this.$message.error('请选择要查看的货品');
          }
          if (rows.length > 1) {
            return this.$message.error('只能选择一条数据查看详情');
          }

          // 跳转到详情页面
          this.$router.push({
            path: '/productdetail',
            query: { id: rows[0].Id }
          });
        }
      });

      //示例：设置修改新建、编辑弹出框字段标签的长度
      // this.boxOptions.labelWidth = 150;

      // 初始化数据源
      this.loadProductTypeCascade();
    },

    // 初始化API数据源
    initApiDataSources() {
      // 获取货品类型级联数据
      this.loadProductTypeCascade();

      // 获取供应商数据
      this.loadSupplierData();

      // 获取用户数据
      this.loadUserData();
    },

    // 加载货品类型级联数据
    loadProductTypeCascade() {
      // 使用框架的http方法
      this.http.get('/api/productinformationmodel/GetProductTypeCascade', {}, false).then(result => {
        if (result.success && result.data) {
          // 找到货品类型字段并设置数据
          this.editFormOptions.forEach(row => {
            row.forEach(field => {
              if (field.field === 'productTypeId' && field.type === 'cascader') {
                field.data = result.data;
              }
            });
          });
        }
      }).catch(error => {
        console.error('加载货品类型级联数据失败:', error);
        // 如果API调用失败，设置空数据避免错误
        this.editFormOptions.forEach(row => {
          row.forEach(field => {
            if (field.field === 'productTypeId' && field.type === 'cascader') {
              field.data = [];
            }
          });
        });
      });
    },

    // 加载供应商数据
    loadSupplierData() {
      console.log('开始加载供应商数据...');
      this.http.post('/api/suppliermodel/GetPageData', {
        page: 1,
        rows: 1000,
        total: 0,
        tableName: "suppliermodel",
        sort: "CreateDate",
        order: "desc",
        wheres: "",
        export: false,
        value: "",
        filter: []
      }, false).then(result => {
        console.log('供应商API响应:', result);
        console.log('result.success:', result.success);
        console.log('result.rows:', result.rows);
        console.log('result.data:', result.data);

        // 检查不同的数据格式
        let supplierRows = null;
        if (result.success && result.rows) {
          supplierRows = result.rows;
        } else if (result.success && result.data) {
          supplierRows = result.data;
        } else if (result.success && Array.isArray(result)) {
          supplierRows = result;
        }

        if (supplierRows && Array.isArray(supplierRows) && supplierRows.length > 0) {
          console.log('找到供应商数据:', supplierRows);
          const supplierData = supplierRows.map(item => ({
            key: item.Id || item.id,
            value: item.SupplierName || item.supplierName || item.name
          }));
          console.log('供应商数据映射结果:', supplierData);

          // 找到供应商字段并设置数据
          let found = false;
          this.editFormOptions.forEach(row => {
            row.forEach(field => {
              if (field.field === 'supplierId' && field.type === 'select') {
                field.data = supplierData;
                found = true;
                console.log('供应商字段数据已设置:', field);
              }
            });
          });

          if (!found) {
            console.error('未找到供应商字段配置');
            console.log('当前editFormOptions:', this.editFormOptions);
          }
        } else {
          console.error('供应商API返回数据格式错误或为空:', result);
          console.log('尝试直接使用result作为数据源...');

          // 尝试直接使用result作为数据源
          if (result && Array.isArray(result) && result.length > 0) {
            const supplierData = result.map(item => ({
              key: item.Id || item.id,
              value: item.SupplierName || item.supplierName || item.name
            }));
            console.log('直接映射结果:', supplierData);

            this.editFormOptions.forEach(row => {
              row.forEach(field => {
                if (field.field === 'supplierId' && field.type === 'select') {
                  field.data = supplierData;
                  console.log('供应商字段数据已设置(直接映射):', field);
                }
              });
            });
          }
        }
      }).catch(error => {
        console.error('加载供应商数据失败:', error);
        // 如果API调用失败，设置空数据避免错误
        this.editFormOptions.forEach(row => {
          row.forEach(field => {
            if (field.field === 'supplierId' && field.type === 'select') {
              field.data = [];
            }
          });
        });
      });
    },

    // 备用供应商数据加载方法
    loadSupplierDataFallback() {
      console.log('执行备用供应商数据加载...');

      // 检查供应商字段是否已有数据
      let hasData = false;
      this.editFormOptions.forEach(row => {
        row.forEach(field => {
          if (field.field === 'supplierId' && field.type === 'select' && field.data && field.data.length > 0) {
            hasData = true;
          }
        });
      });

      if (!hasData) {
        console.log('供应商字段无数据，尝试备用加载...');

        // 使用简化的API调用
        this.http.post('/api/suppliermodel/GetPageData', {
          page: 1,
          rows: 100
        }, false).then(result => {
          console.log('备用API响应:', result);

          // 尝试多种数据格式
          let data = null;
          if (result && result.rows) {
            data = result.rows;
          } else if (result && result.data) {
            data = result.data;
          } else if (Array.isArray(result)) {
            data = result;
          }

          if (data && Array.isArray(data) && data.length > 0) {
            const supplierData = data.map(item => ({
              key: String(item.Id || item.id || item.ID),
              value: item.SupplierName || item.supplierName || item.name || '未知供应商'
            }));

            console.log('备用数据映射结果:', supplierData);

            this.editFormOptions.forEach(row => {
              row.forEach(field => {
                if (field.field === 'supplierId' && field.type === 'select') {
                  field.data = supplierData;
                  console.log('备用数据已设置到供应商字段');
                }
              });
            });
          }
        }).catch(error => {
          console.error('备用供应商数据加载失败:', error);
        });
      } else {
        console.log('供应商字段已有数据，跳过备用加载');
      }
    },

    // 加载用户数据
    loadUserData() {
      this.http.post('/api/User/GetPageData', {
        page: 1,
        rows: 1000,
        total: 0,
        tableName: "Sys_User",
        sort: "CreateDate",
        order: "desc",
        wheres: "",
        export: false,
        value: "",
        filter: []
      }, false).then(result => {
        if (result.success && result.rows) {
          const userData = result.rows.map(item => ({
            key: item.User_Id,
            value: item.UserTrueName || item.UserName
          }));

          // 找到用户字段并设置数据
          this.editFormOptions.forEach(row => {
            row.forEach(field => {
              if (field.field === 'userId' && field.type === 'select') {
                field.data = userData;
              }
            });
          });
        }
      }).catch(error => {
        console.error('加载用户数据失败:', error);
        // 如果API调用失败，设置空数据避免错误
        this.editFormOptions.forEach(row => {
          row.forEach(field => {
            if (field.field === 'userId' && field.type === 'select') {
              field.data = [];
            }
          });
        });
      });
    },
    onInited() {
      //框架初始化配置后
      //如果要配置明细表,在此方法操作
      //this.detailOptions.columns.forEach(column=>{ });

      // 框架初始化完成后加载供应商数据
      this.loadSupplierData();

      // 备用方案：延迟加载供应商数据
      setTimeout(() => {
        this.loadSupplierDataFallback();
      }, 1000);
    },
    searchBefore(param) {
      return true;
    },
    
    searchAfter(result) {
      return true;
    },
    
    rowClick({ row, column, event }) {
      //查询界面点击行事件
      // this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;

      // 点击货品编号列跳转到详情页
      if (column.property === 'goodsCode') {
        this.$router.push({
          path: '/productdetail',
          query: { id: row.Id }
        });
      }
    },
    modelOpenAfter(row) {
      //点击编辑、新建按钮弹出框后，可以在此处写逻辑，如，从后台获取数据
      //(1)判断是编辑还是新建操作： this.currentAction=='Add';
      //(2)给弹出框设置默认值
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值，请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看：console.log(this.editFormOptions)

      // 初始化保质期管理开关状态
      this.initShelfLifeManagement();
    },

    // 初始化保质期管理相关字段的显示状态
    initShelfLifeManagement() {
      const shelfLifeManagement = this.editFormFields.shelfLifeManagement;
      this.toggleShelfLifeFields(shelfLifeManagement);
    },

    // 切换保质期相关字段的显示状态
    toggleShelfLifeFields(isEnabled) {
      // 查找保质期相关字段并设置显示状态
      this.editFormOptions.forEach(row => {
        row.forEach(field => {
          if (field.field === 'shelfLife' || field.field === 'shelfLifeUnit' || field.field === 'warningDays') {
            field.hidden = !isEnabled;
          }
        });
      });
    }
  }
};
export default extension;
